#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int map[3][15][20] =
{
//0:空的 1:■ :墙
//3:☆ 4:★ //目的地和箱子
//5:※ //人
//7:⊙ //目的(3)和箱子(4)在一起
//8:※ //人(5)和目的(3)在一起
//为让多种情况使用一种算法
};
int cas = 0; //为0表示第一关
//记录每一关的箱子数 或者是项目和目的在一起的总数
int boxSum[3] = {3,4,5};
//地图绘图
void drawMap()
{
for (int i = 0; i < 15; i++)
{
for (int j = 0; j < 20; j++)
{
if (j == 0)
printf("\t\t");
switch (map[cas][i][j])
{
// //0:空的 1:■ :墙
case 0:
printf(" ");
break;
case 1:
printf("■");
break;
//3:☆ 4:★ //目的地和箱子
case 3:
printf("☆");
break;
case 4:
printf("★");
break;
//5:※ //人
case 5:
case 8:
printf("※");
break;
case 7:
printf("⊙");
break;
//7:⊙ //目的(3)和箱子(4)在一起
//8:※ //人(5)和目的(3)在一起
}
}
printf("\n");
}
}
//按键处理
void keyDown()
{
//分析按键过程
//定位人在哪里
//人有两种情况:第一个是:人,第二个:人站在目的上
int i, j;
for (i = 0; i < 15; i++)
{
for (j = 0; j < 20; j++)
{
if (map[cas][i][j] == 5 || map[cas][i][j] == 8)
{
break;
}
}
if (map[cas][i][j] == 5 || map[cas][i][j] == 8)
{
break;
}
}
}
//胜负判断
//用什么判断胜负: 箱子到达目的的个数
int gameOver()
{
int count = 0;
//所有的地方找一遍
for (int i = 0; i < 7; i++)
{
for (int j = 0; j < 8; j++)
{
if (map[cas][i][j] == 7)
count++;
}
}
return count;
}
//箱子数是零的时候也是胜利
int gameOver2()
{
int count = 3;
//所有的地方找一遍
for (int i = 0; i < 7; i++)
{
for (int j = 0; j < 8; j++)
{
if (map[cas][i][j] == 3)
count--;
}
}
return count;
}
int main(){
printf("制作: doudian\n");
while (1)
{
printf("\n\t用方向键或w a s d键移动※推动★进入☆\n",cas+1);
printf("\n\t\t 共三关 第 %d 关\n",cas+1);
drawMap();
if (gameOver() == boxSum[cas])
{
cas++;
if (cas == 3)
break;
else
printf("\n\t\t 该关 OK!按任一键进继续\n");
}
keyDown();
system("cls");
}
printf("游戏结束!");
printf("\n");
system("pause");
return 0;
}